package com.tbit.main.controller;

import cn.hutool.core.date.DateUtil;
import com.tbit.common.entity.pojo.vo.CoreDataVO;
import com.tbit.common.entity.pojo.vo.DateResult;
import com.tbit.common.entity.pojo.vo.LineChartVO;
import com.tbit.main.pojo.Result;
import com.tbit.main.util.Assert;
import com.tbit.manager.api.MaintainOAApi;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * 运营分析-运维分析
 * @author <a href="mailto:liu.haoxiang@tbit.com.cn">BUGXiang</a>
 * @version 1.0
 * @since 2025-3-12
 */
@RestController
@RequestMapping("/operationsAnalysis/maintain")
public class MaintainOAController {

    @Resource
    private MaintainOAApi maintainOAApi;


    /**
     * 获取运维分析核心数据
     * @param accountId 区域id
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return  CoreDataVO
     */
    @GetMapping("/mainCoreData")
    public Result<CoreDataVO> mainCoreData(Integer accountId, String startDate, String endDate) {
        Assert.notNull(accountId, "accountId不能为空");
        Assert.notNull(startDate, "startDate不能为空");
        Assert.notNull(endDate, "endDate不能为空");
        return Result.success(maintainOAApi.getMainCoreData(accountId, DateUtil.parse(startDate), DateUtil.parse(endDate)));
    }


    /**
     * 获取运营分析-运维分析数据-用户故障反馈数折线图
     * @param accountId 区域id
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return List<LineChartVO>
     */
    @GetMapping("/machineFaultLineChart")
    public Result<List<LineChartVO>> machineFaultLineChart(Integer accountId, String startDate, String endDate) {
        Assert.notNull(accountId, "accountId不能为空");
        Assert.notNull(startDate, "startDate不能为空");
        Assert.notNull(endDate, "endDate不能为空");
        return Result.success(maintainOAApi.getMachineFaultLineChart(accountId, DateUtil.parse(startDate), DateUtil.parse(endDate)));
    }


    /**
     * 运营分析-运维分析数据-车辆数据分时折线图
     * @param accountId 区域id
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @param type      数据类型：1-低电分时 2-超区分时 3-超时分时
     * @return  List<LineChartVO>
     */
    @GetMapping("/machineLineChart")
    public Result<List<LineChartVO>> machineLineChart(Integer accountId, String startDate, String endDate, Integer type) {
        Assert.notNull(accountId, "accountId不能为空");
        Assert.notNull(startDate, "startDate不能为空");
        Assert.notNull(endDate, "endDate不能为空");
        return Result.success(maintainOAApi.getMachineLineChart(accountId, DateUtil.parse(startDate), DateUtil.parse(endDate), type));
    }


    /**
     * 运营分析-运维分析数据-电量变化折线图
     * @param accountId 区域id
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return  List<DateResult>
     */
    @GetMapping("/powerChangeLineChart")
    public Result<List<DateResult>> powerChangeLineChart(Integer accountId, String startDate, String endDate) {
        Assert.notNull(accountId, "accountId不能为空");
        Assert.notNull(startDate, "startDate不能为空");
        Assert.notNull(endDate, "endDate不能为空");
        return Result.success(maintainOAApi.getPowerChangeLineChart(accountId, DateUtil.parse(startDate), DateUtil.parse(endDate)));
    }


    /**
     * 运营分析-运维分析数据-挪车折线图
     * @param accountId 区域id
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return List<DateResult>
     */
    @GetMapping("/moveLineChart")
    public Result<List<DateResult>> moveLineChart(Integer accountId, String startDate, String endDate) {
        Assert.notNull(accountId, "accountId不能为空");
        Assert.notNull(startDate, "startDate不能为空");
        Assert.notNull(endDate, "endDate不能为空");
        return Result.success(maintainOAApi.getMoveLineChart(accountId, DateUtil.parse(startDate), DateUtil.parse(endDate)));
    }

    /**
     * 运营分析-运维分析数据-调度折线图
     * @param accountId 区域id
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return List<DateResult>
     */
    @GetMapping("/dispatchLineChart")
    public Result<List<DateResult>> dispatchLineChart(Integer accountId, String startDate, String endDate) {
        Assert.notNull(accountId, "accountId不能为空");
        Assert.notNull(startDate, "startDate不能为空");
        Assert.notNull(endDate, "endDate不能为空");
        return Result.success(maintainOAApi.getDispatchLineChart(accountId,DateUtil.parse(startDate), DateUtil.parse(endDate)));
    }


    /**
     * 运营分析-运维分析数据-维修折线图
     * @param accountId 区域id
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return List<DateResult>
     */
    @GetMapping("/repairLineChart")
    public Result<List<DateResult>> repairLineChart(Integer accountId, String startDate, String endDate) {
        Assert.notNull(accountId, "accountId不能为空");
        Assert.notNull(startDate, "startDate不能为空");
        Assert.notNull(endDate, "endDate不能为空");
        return Result.success(maintainOAApi.getRepairLineChart(accountId, DateUtil.parse(startDate), DateUtil.parse(endDate)));
    }


}
